/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controle.modelo;

import controle.database.ConectaBanco;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.Usuario;
import org.postgresql.core.ResultCursor;

/**
 *
 * @author Luiz Cunha
 */
public class ControleUsuario
{

    ConectaBanco conn;

    public ControleUsuario()
    {
        conn = new ConectaBanco();
    }

    public List<Usuario> getUsuariosUsernameLike(String string)
    {
        conn.conexao();
        List<Usuario> returnUsuario = new ArrayList<>();
        try
        {
            if (string.isEmpty())
            {
                string = "";
            }
            String query = "select * from usuario where username like '%" + string + "%';";
            PreparedStatement pst = conn.conn.prepareStatement(query);
            ResultSet resultSet = pst.executeQuery();
            while (resultSet.next())
            {
                returnUsuario.add(preencheUsuario(resultSet));
            }
            conn.desconecta();
            return returnUsuario;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            conn.desconecta();
        }

        return null;
    }

    public void addUsuario(Usuario usuario)
    {
        conn.conexao();
        try
        {
            PreparedStatement pst = conn.conn.prepareStatement("INSERT INTO USUARIO (nome, username, password) VALUES (?,?,?)");
            pst.setString(1, usuario.getNome());
            pst.setString(2, usuario.getUsername());
            pst.setString(3, usuario.getSenha());
            pst.execute();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            conn.desconecta();

        }
    }

    public Usuario getUsuarioByUsername(String username)
    {
        conn.conexao();
        try
        {
            PreparedStatement pst = conn.conn.prepareStatement("SELECT * FROM USUARIO WHERE USERNAME = ?");
            pst.setString(1, username);
            ResultSet resultSet = pst.executeQuery();
            resultSet.next();
            Usuario usuarioDeRetorno = preencheUsuario(resultSet);
            conn.desconecta();
            return usuarioDeRetorno;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            conn.desconecta();
        }

        return null;
    }

    public Usuario getUsuarioById(Integer id)
    {
        conn.conexao();
        try
        {
            PreparedStatement pst = conn.conn.prepareStatement("SELECT * FROM USUARIO WHERE id_usuario = ?");
            pst.setInt(1, id);
            ResultSet resultSet = pst.executeQuery();
            resultSet.next();
            Usuario usuarioDeRetorno = preencheUsuario(resultSet);
            conn.desconecta();
            return usuarioDeRetorno;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            conn.desconecta();
        }

        return null;
    }

    private Usuario preencheUsuario(ResultSet resultSet) throws SQLException
    {
        Usuario tempUser = new Usuario();
        tempUser.setIdUsuario(resultSet.getInt("id_usuario"));
        tempUser.setNome(resultSet.getString("nome"));
        tempUser.setSenha(resultSet.getString("password"));
        tempUser.setUsername(resultSet.getString("username"));

        return tempUser;
    }

    public List<Usuario> getAllUsuarios()
    {
        List<Usuario> listaDeUsuarios = new ArrayList<>();
        conn.conexao();
        try
        {
            PreparedStatement pst = conn.conn.prepareStatement("SELECT * FROM USUARIO");
            ResultSet resultSet = pst.executeQuery();
            while (resultSet.next())
            {
                listaDeUsuarios.add(preencheUsuario(resultSet));
            }
            conn.desconecta();
            return listaDeUsuarios;
        }
        catch (Exception e)
        {
            e.printStackTrace();
            conn.desconecta();
        }
        return null;
    }

    public void deleteUsuario(Usuario usuario)
    {
        conn.conexao();
        try
        {
            PreparedStatement pst = conn.conn.prepareStatement("DELETE FROM USUARIO WHERE username = ?");
            pst.setString(1, usuario.getUsername());
            pst.execute();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            conn.desconecta();
        }
    }

    public void updateUsuario(Usuario usuario)
    {
        conn.conexao();
        try
        {
            PreparedStatement pst = conn.conn.prepareStatement("UPDATE USUARIO SET nome = ?, username = ?, password = ? WHERE id_usuario = ?");
            pst.setString(1, usuario.getNome());
            pst.setString(2, usuario.getUsername());
            pst.setString(3, usuario.getSenha());
            pst.setInt(4, usuario.getIdUsuario());
            pst.execute();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            conn.desconecta();
        }
    }

}
